package xserver;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.mina.common.IoAcceptor;
import org.apache.mina.common.IoAcceptorConfig;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;

import xgame.chat.ChatModuleT;
import xgame.login.LoginModuleT;
import xserver.codec.CommandResultCodecFactory;

/**
 * 游戏服务器
 * 
 * @author AfritXia
 * @version $Rev: 17 $
 *
 */
public final class GameServer {
	/**
	 * 自定义编解码器
	 * 
	 */
	private static final String MY_CODEC = "__myCodec";

	/**
	 * 应用程序主函数
	 * 
	 * @param args 
	 * 
	 */
	public static void main(String[] args) {
		// 创建游戏服务器
		GameServer gs = new GameServer();

		System.out.println("hello, Xserver");
		System.out.println("--------");
		
		// 初始化
		System.out.println(".init");
		gs.init();
		
		// 启动服务器
		System.out.println(".startUp");
		gs.startUp();
	}

	/**
	 * 初始化
	 * 
	 */
	public void init() {
		// 注册登录模块
		XmoduleTManager.register(new LoginModuleT());
		// 注册登录模块
		XmoduleTManager.register(new ChatModuleT());
	}

	/**
	 * 启动游戏服务器
	 * 
	 */
	public void startUp() {
		// 创建 IO 接收器
		IoAcceptor acceptor = new SocketAcceptor();
		// 创建配置
		IoAcceptorConfig cfg = new SocketAcceptorConfig();

		// 添加自定义编解码器
		cfg.getFilterChain().addLast(MY_CODEC, 
			new ProtocolCodecFilter(new CommandResultCodecFactory()));

		try {
			// 绑定端口
			acceptor.bind(new InetSocketAddress(4400), new MyIoHandler(), cfg);
		} catch (IOException ex) {
			// 输出异常
			ex.printStackTrace();
			System.exit(-1);
		}
	}
}
